Pointer field


In [1]:
from konfoo import Index, BYTEORDER, Byteorder, Pointer, Pointer8, Pointer16, Pointer24, Pointer32, Pointer64

Item

Item type of the field class.


In [2]:
Pointer.item_type


Out[2]:
ItemClass.Pointer = 3

Checks if the field class is a bit field.


In [3]:
Pointer.is_bit()


Out[3]:
False

Checks if the field class is a boolean field.


In [4]:
Pointer.is_bool()


Out[4]:
False

Checks if the field class is a decimal number field.


In [5]:
Pointer.is_decimal()


Out[5]:
True

Checks if the field class is a floating point number field.


In [6]:
Pointer.is_float()


Out[6]:
False

Checks if the field class is a pointer field.


In [7]:
Pointer.is_pointer()


Out[7]:
True

Checks if the field class is a stream field.


In [8]:
Pointer.is_stream()


Out[8]:
False

Checks if the field class is a string field.


In [9]:
Pointer.is_string()


Out[9]:
False

Field


In [10]:
pointer = Pointer(template=None, address=None, data_order=BYTEORDER, bit_size=32, align_to=None, field_order='auto')

In [11]:
pointer = Pointer()

Field view


In [12]:
pointer


Out[12]:
Pointer(index=Index(byte=0, bit=0, address=0, base_address=0, update=False), alignment=Alignment(byte_size=4, bit_offset=0), bit_size=32, value='0x0')

In [13]:
str(pointer)


Out[13]:
'Pointer32(Index(byte=0, bit=0, address=0, base_address=0, update=False), Alignment(byte_size=4, bit_offset=0), 32, 0x0)'

In [14]:
repr(pointer)


Out[14]:
"Pointer(index=Index(byte=0, bit=0, address=0, base_address=0, update=False), alignment=Alignment(byte_size=4, bit_offset=0), bit_size=32, value='0x0')"

Field name


In [15]:
pointer.name


Out[15]:
'Pointer32'

Field index


In [16]:
pointer.index


Out[16]:
Index(byte=0, bit=0, address=0, base_address=0, update=False)

Byte index of the field within the byte stream.


In [17]:
pointer.index.byte


Out[17]:
0

Bit offset relative to the byte index of the field within the byte stream.


In [18]:
pointer.index.bit


Out[18]:
0

Absolute address of the field within the data source.


In [19]:
pointer.index.address


Out[19]:
0

Base address of the byte stream within the data source.


In [20]:
pointer.index.base_address


Out[20]:
0

Indexes the field and returns the index after the field.


In [21]:
pointer.index_field(index=Index())


Out[21]:
Index(byte=4, bit=0, address=4, base_address=0, update=False)

Field alignment


In [22]:
pointer.alignment


Out[22]:
Alignment(byte_size=4, bit_offset=0)

Byte size of the field group which the field is aligned to.


In [23]:
pointer.alignment.byte_size


Out[23]:
4

Bit offset of the field within its aligned field group.


In [24]:
pointer.alignment.bit_offset


Out[24]:
0

Field size


In [25]:
pointer.bit_size


Out[25]:
32

Field byte order


In [26]:
pointer.byte_order


Out[26]:
Byteorder.auto = 'auto'

In [27]:
pointer.byte_order.value


Out[27]:
'auto'

In [28]:
pointer.byte_order.name


Out[28]:
'auto'

In [29]:
pointer.byte_order = 'auto'

In [30]:
pointer.byte_order = Byteorder.auto

Field value

Checks if the decimal field is signed or unsigned.


In [31]:
pointer.signed


Out[31]:
False

Maximal decimal field value.


In [32]:
pointer.max()


Out[32]:
4294967295

Minimal decimal field value.


In [33]:
pointer.min()


Out[33]:
0

Returns the pointer field value as a lowercase hexadecimal string prefixed with 0x.


In [34]:
pointer.value


Out[34]:
'0x0'

Returns the decimal field value aligned to its field group as a number of bytes.


In [35]:
bytes(pointer)


Out[35]:
b'\x00\x00\x00\x00'

In [36]:
bytes(pointer).hex()


Out[36]:
'00000000'

Returns the decimal field value as an integer number.


In [37]:
int(pointer)


Out[37]:
0

Returns the decimal field value as an floating point number.


In [38]:
float(pointer)


Out[38]:
0.0

Returns the decimal field value as a lowercase hexadecimal string prefixed with 0x.


In [39]:
hex(pointer)


Out[39]:
'0x0'

Returns the decimal field value as a binary string prefixed with 0b.


In [40]:
bin(pointer)


Out[40]:
'0b0'

Returns the decimal field value as an octal string prefixed with 0o.


In [41]:
oct(pointer)


Out[41]:
'0o0'

Returns the decimal field value as a boolean value.


In [42]:
bool(pointer)


Out[42]:
False

In [43]:
pointer.is_null()


Out[43]:
True

Returns the decimal field value as a signed integer number.


In [44]:
pointer.as_signed()


Out[44]:
0

Returns the decimal field value as an unsigned integer number.


In [45]:
pointer.as_unsigned()


Out[45]:
0

Field metadata

Returns the meatadata of the field as an ordered dictionary.


In [46]:
pointer.describe()


Out[46]:
OrderedDict([('address', 0),
             ('alignment', [4, 0]),
             ('class', 'Pointer'),
             ('index', [0, 0]),
             ('max', 4294967295),
             ('min', 0),
             ('name', 'Pointer'),
             ('order', 'auto'),
             ('signed', False),
             ('size', 32),
             ('type', 'Pointer'),
             ('value', '0x0')])

Deserialize


In [47]:
pointer.deserialize(bytes.fromhex('00010000'), byte_order='little')


Out[47]:
Index(byte=4, bit=0, address=4, base_address=0, update=False)

In [48]:
pointer.value


Out[48]:
'0x100'

In [49]:
bytes(pointer)


Out[49]:
b'\x00\x01\x00\x00'

In [50]:
bytes(pointer).hex()


Out[50]:
'00010000'

In [51]:
int(pointer)


Out[51]:
256

In [52]:
float(pointer)


Out[52]:
256.0

In [53]:
hex(pointer)


Out[53]:
'0x100'

In [54]:
bin(pointer)


Out[54]:
'0b100000000'

In [55]:
oct(pointer)


Out[55]:
'0o400'

In [56]:
bool(pointer)


Out[56]:
True

Serialize


In [57]:
buffer = bytearray()

In [58]:
pointer.value = 256

In [59]:
pointer.value = 256.0

In [60]:
pointer.value = 0x100

In [61]:
pointer.value = 0b100000000

In [62]:
pointer.value = 0o400

In [63]:
pointer.value = False

In [64]:
pointer.value = 256

In [65]:
pointer.serialize(buffer, byte_order='little')


Out[65]:
Index(byte=4, bit=0, address=4, base_address=0, update=False)

In [66]:
buffer.hex()


Out[66]:
'00010000'

In [67]:
bytes(pointer).hex()


Out[67]:
'00010000'

Data Object of a Pointer Field


In [68]:
pointer = Pointer(template=None, address=None, data_order=BYTEORDER, bit_size=32, align_to=None, field_order='auto')

In [69]:
pointer = Pointer()

Returns the absolute address of the data object within the data source referenced by a pointer field.


In [70]:
pointer.address


Out[70]:
0

Returns the base address of the data source for the data object referenced by a pointer field.


In [71]:
pointer.base_address


Out[71]:
0

Returns the data object referenced by a pointer field.


In [72]:
pointer.data

Returns the byte size of the data object referenced by a pointer field.


In [73]:
pointer.data_size


Out[73]:
0

Byte order of the data object referenced by a pointer field.


In [74]:
pointer.data_byte_order


Out[74]:
Byteorder.little = 'little'

The internally used byte stream for the deserialization and serialization of the data object referenced by a pointer field returned as a lowercase hexadecimal sting.


In [75]:
pointer.bytestream


Out[75]:
''

Deserialize the data object referenced by a pointer field.


In [76]:
pointer.deserialize_data()


Out[76]:
Index(byte=0, bit=0, address=0, base_address=0, update=False)

Serialize the data object referenced by a pointer field.


In [77]:
pointer.serialize_data()


Out[77]:
b''

Indexes the data object referenced by a pointer field.


In [78]:
pointer.index_data()

In [79]:
pointer.index_fields(idnex=Index())


Out[79]:
Index(byte=4, bit=0, address=4, base_address=0, update=False)

In [ ]: